#include <bits/stdc++.h>

using namespace std;
// 找到最长路径，只要某个起点可以达到最长路径，这条路径上的每一个点都可以
/*
先考虑行，从第一列开始每次跳s个格子，
如果(n-1)%s==0:行的数量就是(n-1)/s+1，
且向下移动(n-1)%s格，坑的数量不变
所以行的数量有((n-1)/s+1)*((n-1)%s)
列的考虑同理
最终的答案就是行数乘以列数

*/
int main()
{
	int n, m, s;
	cin >> n >> m >> s;
	int x = 0, y = 0;
	x = ((n - 1) / s + 1) * ((n - 1) % s + 1);
	y = ((m - 1) / s + 1) * ((m - 1) % s + 1);
	long long ans = (long long)x * y;
	cout << ans << endl;
	return 0;
}